1 TADPOLE and BSWiMS

1.0.1 Loading the libraries

library("FRESA.CAD")
library(survival)
library(readxl)
library(igraph)
op <- par(no.readonly = TRUE)
pander::panderOptions('digits', 3)
pander::panderOptions('table.split.table', 400)
pander::panderOptions('keep.trailing.zeros',TRUE)

1.1 The data set

setwd("~")
TADPOLE_D1_D2 <- read.csv("~/GitHub/SurvivalTadpole/Data/TADPOLE/TADPOLE_D1_D2.csv")
TADPOLE_D1_D2_Dict <- read.csv("~/GitHub/SurvivalTadpole/Data/TADPOLE/TADPOLE_D1_D2_Dict.csv")
TADPOLE_D1_D2_Dict_LR <- as.data.frame(read_excel("~/GitHub/SurvivalTadpole/Data/TADPOLE/TADPOLE_D1_D2_Dict_LR.xlsx",sheet = "LeftRightFeatures"))


rownames(TADPOLE_D1_D2_Dict) <- TADPOLE_D1_D2_Dict$FLDNAME

1.2 Conditioning the data


# mm3 to mm
isVolume <- c("Ventricles","Hippocampus","WholeBrain","Entorhinal","Fusiform","MidTemp","ICV",
              TADPOLE_D1_D2_Dict$FLDNAME[str_detect(TADPOLE_D1_D2_Dict$TEXT,"Volume")]
              )


#TADPOLE_D1_D2[,isVolume] <- apply(TADPOLE_D1_D2[,isVolume],2,'^',(1/3))
TADPOLE_D1_D2[,isVolume] <- TADPOLE_D1_D2[,isVolume]^(1/3)

# mm2 to mm
isArea <- TADPOLE_D1_D2_Dict$FLDNAME[str_detect(TADPOLE_D1_D2_Dict$TEXT,"Area")]
TADPOLE_D1_D2[,isArea] <- sqrt(TADPOLE_D1_D2[,isArea])

# Get only cross sectional measurements
FreeSurfersetCross <- str_detect(colnames(TADPOLE_D1_D2),"UCSFFSX")

# The subset of baseline measurements
baselineTadpole <- subset(TADPOLE_D1_D2,VISCODE=="bl")
pander::pander(table(baselineTadpole$DX))
  Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
7 336 1 864 5 2 521 1

rownames(baselineTadpole) <- baselineTadpole$PTID

pander::pander(table(baselineTadpole$APOE4))
0 1 2
916 638 171

validBaselineTadpole <- cbind(DX=baselineTadpole$DX,
                                 AGE=baselineTadpole$AGE,
                                 Gender=1*(baselineTadpole$PTGENDER=="Female"),
                                 ADAS11=baselineTadpole$ADAS11,
                                 ADAS13=baselineTadpole$ADAS13,
                                 MMSE=baselineTadpole$MMSE,
                                 RAVLT_immediate=baselineTadpole$RAVLT_immediate,
                                 RAVLT_learning=baselineTadpole$RAVLT_learning,
                                 RAVLT_forgetting=baselineTadpole$RAVLT_forgetting,
                                 RAVLT_perc_forgetting=baselineTadpole$RAVLT_perc_forgetting,
                                 FAQ=baselineTadpole$FAQ,
                                 APOE4=1*(as.numeric(baselineTadpole$APOE4)>0),
                                 Ventricles=baselineTadpole$Ventricles,
                                 Hippocampus=baselineTadpole$Hippocampus,
                                 WholeBrain=baselineTadpole$WholeBrain,
                                 Entorhinal=baselineTadpole$Entorhinal,
                                 Fusiform=baselineTadpole$Fusiform,
                                 MidTemp=baselineTadpole$MidTemp,
                                 ICV=baselineTadpole$ICV,
                                 ABETA=as.numeric(baselineTadpole$ABETA_UPENNBIOMK9_04_19_17),
                                 TAU=as.numeric(baselineTadpole$TAU_UPENNBIOMK9_04_19_17),
                                 PTAU=as.numeric(baselineTadpole$PTAU_UPENNBIOMK9_04_19_17),
                                 baselineTadpole[,FreeSurfersetCross])

pander::pander(summary(validBaselineTadpole$APOE4))
Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
0 0 0 0.469 1 1 12
pander::pander(summary(validBaselineTadpole$ABETA))
Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
203 596 854 1053 1396 3592 523
pander::pander(summary(validBaselineTadpole$TAU))
Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
81.5 194 258 287 350 852 527
pander::pander(summary(validBaselineTadpole$PTAU))
Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
8.21 17.4 24.2 27.6 34 103 528

fraction <- sum(is.na(validBaselineTadpole$PTAU)/nrow(validBaselineTadpole))
pander::pander(c(col=ncol(validBaselineTadpole),row=nrow(validBaselineTadpole)))
col row
386 1737

pander::pander(table(validBaselineTadpole$DX))
  Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
7 336 1 864 5 2 521 1

LeftFields <- TADPOLE_D1_D2_Dict_LR$LFN
names(LeftFields) <- LeftFields
LeftFields <- LeftFields[LeftFields %in% colnames(validBaselineTadpole)]
RightFields <- TADPOLE_D1_D2_Dict_LR$RFN
names(RightFields) <- RightFields
RightFields <- RightFields[RightFields %in% colnames(validBaselineTadpole)]

## Normalize to ICV
validBaselineTadpole$Ventricles=1000.0*validBaselineTadpole$Ventricles/validBaselineTadpole$ICV
validBaselineTadpole$Hippocampus=1000.0*validBaselineTadpole$Hippocampus/validBaselineTadpole$ICV
validBaselineTadpole$WholeBrain=1000.0*validBaselineTadpole$WholeBrain/validBaselineTadpole$ICV
validBaselineTadpole$Entorhinal=1000.0*validBaselineTadpole$Entorhinal/validBaselineTadpole$ICV
validBaselineTadpole$Fusiform=1000.0*validBaselineTadpole$Fusiform/validBaselineTadpole$ICV
validBaselineTadpole$MidTemp=1000.0*validBaselineTadpole$MidTemp/validBaselineTadpole$ICV

leftData <- 1000.0*validBaselineTadpole[,LeftFields]/validBaselineTadpole$ICV
RightData <- 1000.0*validBaselineTadpole[,RightFields]/validBaselineTadpole$ICV

## get mean and relative difference 
meanLeftRight <- (leftData + RightData)/2
difLeftRight <- abs(leftData - RightData)
reldifLeftRight <- 100.0*difLeftRight/meanLeftRight
colnames(meanLeftRight) <- paste("M",colnames(meanLeftRight),sep="_")
colnames(difLeftRight) <- paste("D",colnames(difLeftRight),sep="_")
colnames(reldifLeftRight) <- paste("RD",colnames(reldifLeftRight),sep="_")


validBaselineTadpole <- validBaselineTadpole[,!(colnames(validBaselineTadpole) %in% 
                                               c(LeftFields,RightFields))]
validBaselineTadpole <- cbind(validBaselineTadpole,meanLeftRight,reldifLeftRight)

## Remove columns with too many NA more than %35 of NA
nacount <- apply(is.na(validBaselineTadpole),2,sum)/nrow(validBaselineTadpole) <= fraction
sum(nacount)

[1] 352

length(nacount)

[1] 386

diagnose <- validBaselineTadpole$DX
pander::pander(table(diagnose))
  Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
7 336 1 864 5 2 521 1
validBaselineTadpole <- validBaselineTadpole[,nacount]
## Remove character columns
ischar <- sapply(validBaselineTadpole,class) == "character"
sum(ischar)

[1] 15

validBaselineTadpole <- validBaselineTadpole[,!ischar]
## Place back diagnose
validBaselineTadpole$DX <- diagnose

pander::pander(table(validBaselineTadpole$DX))
  Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
7 336 1 864 5 2 521 1


pander::pander(summary(validBaselineTadpole$APOE4))
Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
0 0 0 0.469 1 1 12
pander::pander(summary(validBaselineTadpole$ABETA))
Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
203 596 854 1053 1396 3592 523
pander::pander(summary(validBaselineTadpole$TAU))
Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
81.5 194 258 287 350 852 527
pander::pander(summary(validBaselineTadpole$PTAU))
Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s
8.21 17.4 24.2 27.6 34 103 528

pander::pander(c(col=ncol(validBaselineTadpole),row=nrow(validBaselineTadpole)))
col row
338 1737

#subMCI <- subset(validBaselineTadpole,DX=="MCI")
#apply(is.na(subMCI),2,sum)

validBaselineTadpole$Hippocampus <- NULL
validBaselineTadpole$Entorhinal <- NULL
validBaselineTadpole$Fusiform <- NULL
validBaselineTadpole$MidTemp <- NULL

validBaselineTadpole <- validBaselineTadpole[complete.cases(validBaselineTadpole),]
ischar <- sapply(validBaselineTadpole,class) == "character"
validBaselineTadpole[,!ischar] <- sapply(validBaselineTadpole[,!ischar],as.numeric)

pander::pander(table(validBaselineTadpole$DX))
Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
196 1 582 1 2 337 1

pander::pander(summary(validBaselineTadpole$APOE4))
Min. 1st Qu. Median Mean 3rd Qu. Max.
0 0 0 0.458 1 1
pander::pander(summary(validBaselineTadpole$ABETA))
Min. 1st Qu. Median Mean 3rd Qu. Max.
203 604 863 1067 1416 3592
pander::pander(summary(validBaselineTadpole$TAU))
Min. 1st Qu. Median Mean 3rd Qu. Max.
97.9 193 257 286 350 852
pander::pander(summary(validBaselineTadpole$PTAU))
Min. 1st Qu. Median Mean 3rd Qu. Max.
8.21 17.3 24 27.5 34 103

pander::pander(c(col=ncol(validBaselineTadpole),row=nrow(validBaselineTadpole)))
col row
334 1120

colnames(validBaselineTadpole) <- str_remove_all(colnames(validBaselineTadpole),"_UCSFFSX_11_02_15_UCSFFSX51_08_01_16")
colnames(validBaselineTadpole) <- str_replace_all(colnames(validBaselineTadpole)," ","_")
validBaselineTadpole$LONISID <- NULL
validBaselineTadpole$IMAGEUID <- NULL
validBaselineTadpole$LONIUID <- NULL

diagnose <- as.character(validBaselineTadpole$DX)
validBaselineTadpole$DX <- diagnose
pander::pander(table(validBaselineTadpole$DX))
Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
196 1 582 1 2 337 1


validDX <- c("NL","MCI","Dementia")

validBaselineTadpole <- validBaselineTadpole[validBaselineTadpole$DX %in% validDX,]
validBaselineTadpole$DX <- as.factor(validBaselineTadpole$DX)
pander::pander(table(validBaselineTadpole$DX))
Dementia MCI NL
196 582 337

1.2.1 Correlation Matrix Data

The heat map of the testing set.


cormat <- cor(validBaselineTadpole[,colnames(validBaselineTadpole) != "DX"],method="spearman")
diag(cormat) <- 0;
corrmax <- apply(cormat,2,max)
whomax <- colnames(cormat)[corrmax>0.75]
gplots::heatmap.2(abs(cormat[whomax,whomax]),
                  trace = "none",
                  scale = "none",
                  mar = c(10,10),
                  col=rev(heat.colors(5)),
                  main = "Baseline TADPOLE Correlation",
                  cexRow = 0.5,
                  cexCol = 0.5,
                  key.title=NA,
                  key.xlab="Spearman Correlation",
                  xlab="Feature", ylab="Feature")

par(op)

1.3 Get the Time To Event on MCI Subjects


subjectsID <- rownames(validBaselineTadpole)
visitsID <- unique(TADPOLE_D1_D2$VISCODE)
baseDx <- TADPOLE_D1_D2[TADPOLE_D1_D2$VISCODE=="bl",c("PTID","DX","EXAMDATE")]
rownames(baseDx) <- baseDx$PTID 
baseDx <- baseDx[subjectsID,]
lastDx <- baseDx
toDementia <- baseDx
table(lastDx$DX)

Dementia MCI NL 196 582 337

hasDementia <- lastDx$PTID[str_detect(lastDx$DX,"Dementia")]


for (vid in visitsID)
{
  DxValue <- TADPOLE_D1_D2[TADPOLE_D1_D2$VISCODE==vid,c("PTID","DX","EXAMDATE")]
  rownames(DxValue) <- DxValue$PTID 
  DxValue <- DxValue[DxValue$PTID %in% subjectsID,]
  noDX <- DxValue$PTID[nchar(DxValue$DX) < 1]
  print(length(noDX))
  DxValue[noDX,] <- lastDx[noDX,]
  inLast <- lastDx$PTID[lastDx$PTID %in% DxValue$PTID]
  print(length(inLast))
  lastDx[inLast,] <- DxValue[inLast,]
  noDementia <- !(toDementia$PTID %in% hasDementia)
  toDementia[noDementia,] <- lastDx[noDementia,]
  hasDementia <- unique(c(hasDementia,lastDx$PTID[str_detect(lastDx$DX,"Dementia")]))
}

[1] 0 [1] 1115 [1] 2 [1] 1058 [1] 6 [1] 976 [1] 22 [1] 882 [1] 678 [1] 833 [1] 29 [1] 557 [1] 11 [1] 120 [1] 9 [1] 90 [1] 33 [1] 453 [1] 22 [1] 206 [1] 9 [1] 73 [1] 663 [1] 663 [1] 62 [1] 62 [1] 100 [1] 100 [1] 98 [1] 98 [1] 457 [1] 457 [1] 169 [1] 169 [1] 91 [1] 91 [1] 4 [1] 4 [1] 8 [1] 53 [1] 7 [1] 37 [1] 0 [1] 0

table(lastDx$DX)
   Dementia Dementia to MCI             MCI MCI to Dementia       MCI to NL 
        338               4             380              60               6 
         NL       NL to MCI 
        310              17 
baseMCI <-baseDx$PTID[baseDx$DX == "MCI"]
lastDementia <- lastDx$PTID[str_detect(lastDx$DX,"Dementia")]
lastDementia2 <- toDementia$PTID[str_detect(toDementia$DX,"Dementia")]
lastNL <- lastDx$PTID[str_detect(lastDx$DX,"NL")]

MCIatBaseline <- baseDx[baseMCI,]
MCIatEvent <- toDementia[baseMCI,]
MCIatLast <- lastDx[baseMCI,]

MCIconverters <- MCIatBaseline[baseMCI %in% lastDementia,]
MCI_No_converters <- MCIatBaseline[!(baseMCI %in% MCIconverters$PTID),]
MCIconverters$TimeToEvent <- (as.Date(toDementia[MCIconverters$PTID,"EXAMDATE"]) 
                                   - as.Date(MCIconverters$EXAMDATE))

sum(MCIconverters$TimeToEvent ==0)

[1] 0



MCIconverters$AtEventDX <- MCIatEvent[MCIconverters$PTID,"DX"]
MCIconverters$LastDX <- MCIatLast[MCIconverters$PTID,"DX"]

MCI_No_converters$TimeToEvent <- (as.Date(lastDx[MCI_No_converters$PTID,"EXAMDATE"]) 
                                   - as.Date(MCI_No_converters$EXAMDATE))

MCI_No_converters$LastDX <- MCIatLast[MCI_No_converters$PTID,"DX"]

MCI_No_converters <- subset(MCI_No_converters,TimeToEvent > 0)

2 Prognosis MCI to AD Conversion

2.1 the set

TrainFraction <- 0.70;

MCIPrognosisIDs <- c(MCIconverters$PTID,MCI_No_converters$PTID)

TADPOLECrossMRI <- validBaselineTadpole[MCIPrognosisIDs,]


pander::pander(table(TADPOLECrossMRI$DX))
Dementia MCI NL
0 564 0
TADPOLECrossMRI$DX <- NULL
TADPOLECrossMRI$status <- 1*(rownames(TADPOLECrossMRI) %in% MCIconverters$PTID)
table(TADPOLECrossMRI$status)

0 1 373 191

TADPOLECrossMRI$TimeToEvent <- numeric(nrow(TADPOLECrossMRI))
TADPOLECrossMRI[MCIconverters$PTID,"TimeToEvent"] <- MCIconverters$TimeToEvent
TADPOLECrossMRI[MCI_No_converters$PTID,"TimeToEvent"] <- MCI_No_converters$TimeToEvent
TADPOLECrossMRI$TimeToEvent <- TADPOLECrossMRI$TimeToEvent/365.25


TADPOLE_Cases <- subset(TADPOLECrossMRI,status==1)
TADPOLE_Controls <- subset(TADPOLECrossMRI,status==0)
trainCasesSet <- sample(nrow(TADPOLE_Cases),nrow(TADPOLE_Cases)*TrainFraction)
trainControlSet <- sample(nrow(TADPOLE_Controls),nrow(TADPOLE_Controls)*TrainFraction)

TADPOLE_Conv_TRAIN <- rbind(TADPOLE_Cases[trainCasesSet,],TADPOLE_Controls[trainControlSet,])
TADPOLE_Conv_TEST <- TADPOLECrossMRI[!(rownames(TADPOLECrossMRI) %in%
                                         rownames(TADPOLE_Conv_TRAIN)),]

pander::pander(table(TADPOLE_Conv_TRAIN$status))
0 1
261 133
pander::pander(table(TADPOLE_Conv_TEST$status))
0 1
112 58

pander::pander(c(col=ncol(TADPOLECrossMRI),row=nrow(TADPOLECrossMRI)))
col row
332 564

par(op)

2.1.1 Number of subjects


pander::pander(table(is.na(as.numeric(baselineTadpole$ABETA_UPENNBIOMK9_04_19_17)),baselineTadpole$DX))
    Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
FALSE 0 228 1 615 1 2 366 1
TRUE 7 108 0 249 4 0 155 0
pander::pander(table(is.na(as.numeric(baselineTadpole$APOE4)),baselineTadpole$DX))
    Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
FALSE 1 334 1 861 5 2 520 1
TRUE 6 2 0 3 0 0 1 0
pander::pander(table(is.na(as.numeric(baselineTadpole$TAU_UPENNBIOMK9_04_19_17)),baselineTadpole$DX))
    Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
FALSE 0 227 1 614 1 2 364 1
TRUE 7 109 0 250 4 0 157 0
pander::pander(table(is.na(as.numeric(baselineTadpole$PTAU_UPENNBIOMK9_04_19_17)),baselineTadpole$DX))
    Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
FALSE 0 227 1 614 1 2 363 1
TRUE 7 109 0 250 4 0 158 0
pander::pander(table(is.na(as.numeric(baselineTadpole$PTAU_UPENNBIOMK9_04_19_17)),
                     is.na(as.numeric(baselineTadpole$ABETA_UPENNBIOMK9_04_19_17))))
  FALSE TRUE
FALSE 1208 1
TRUE 6 522

pander::pander(table(baselineTadpole$DX_bl,baselineTadpole$DX))
    Dementia Dementia to MCI MCI MCI to Dementia MCI to NL NL NL to MCI
AD 2 335 0 0 5 0 0 0
CN 2 0 0 0 0 0 415 0
EMCI 2 0 0 306 0 2 0 0
LMCI 1 1 1 558 0 0 0 1
SMC 0 0 0 0 0 0 106 0
pander::pander(c(col=ncol(baselineTadpole),row=nrow(baselineTadpole)))
col row
1907 1737
pander::pander(c(col=ncol(validBaselineTadpole),row=nrow(validBaselineTadpole)))
col row
331 1115
pander::pander(c(col=ncol(TADPOLECrossMRI),row=nrow(TADPOLECrossMRI)))
col row
332 564

2.1.2 Data Summary

varlist <- colnames(TADPOLECrossMRI);
varlist <- varlist[varlist != "status"]
varlist <- varlist[1:17]
varlist <- cbind(varlist,varlist)
uvar <- uniRankVar(variableList=varlist,
                   formula="Surv(TimeToEvent,status)~1+AGE",
                   Outcome="status",
                   data=TADPOLECrossMRI,
                   timeOutcome="TimeToEvent")

colnames(uvar$orderframe)

[1] “Name” “parent” “descrip”
[4] “cohortMean” “cohortStd” “cohortKSD”
[7] “cohortKSP” “caseMean” “caseStd”
[10] “caseKSD” “caseKSP” “caseZKSD”
[13] “caseZKSP” “controlMean” “controlStd”
[16] “controlKSD” “controlKSP” “controlZKSD”
[19] “controlZKSP” “Beta” “t.Rawvalue”
[22] “t.Zvalue” “wilcox.Zvalue” “ZGLM”
[25] “zNRI” “zIDI” “ROCAUC”
[28] “cStatCorr” “NRI” “IDI”
[31] “NeRI” “kendall.r” “kendall.p”
[34] “BinRes.p” “TstudentRes.p” “WilcoxRes.p”
[37] “FRes.p” “caseN_Z_Low_Tail” “caseN_Z_Hi_Tail”
[40] “controlN_Z_Low_Tail” “controlN_Z_Hi_Tail” “Sensitivity”
[43] “Specificity”

uninames <- c("caseMean","caseStd","controlMean","controlStd","Beta","ZGLM","t.Rawvalue")   


pander::pander(uvar$orderframe[,uninames])
  caseMean caseStd controlMean controlStd Beta ZGLM t.Rawvalue
ADAS13 20.87 6.22 13.70 5.79 0.14787 13.512 -13.26
RAVLT_immediate 28.59 7.20 37.69 10.71 -0.09474 -10.170 11.95
ADAS11 12.93 4.64 8.52 3.82 0.18301 12.714 -11.31
ABETA 724.01 325.90 1154.23 580.01 -0.00186 -8.306 11.27
FAQ 5.24 4.68 1.99 3.19 0.13666 10.898 -8.64
WholeBrain 868.01 20.44 884.40 21.25 -0.03023 -8.227 8.89
RAVLT_perc_forgetting 76.12 29.11 52.82 30.46 0.02238 8.259 -8.85
PTAU 34.33 15.10 24.27 13.15 0.03356 8.321 -7.82
RAVLT_learning 3.07 2.31 4.80 2.53 -0.25149 -7.649 8.16
TAU 342.46 133.00 256.44 117.93 0.00367 7.938 -7.55
MMSE 26.96 1.79 28.11 1.69 -0.29581 -7.470 7.37
APOE4 67.00 124.00 218.00 155.00 0.97645 6.281 NA
Ventricles 296.33 46.40 280.03 49.43 0.00642 3.958 -3.86
RAVLT_forgetting 5.08 2.27 4.52 2.43 0.08752 2.887 -2.73
ICV 115.65 4.38 115.15 3.95 0.01548 0.847 -1.34
Gender 119.00 72.00 217.00 156.00 -0.05101 -0.338 NA
AGE 73.53 7.07 71.93 7.65 0.02660 2.704 -2.47

2.1.3 Cross Validation all Features




cvBSWiMSRaw <- randomCV(TADPOLECrossMRI,
                 Surv(TimeToEvent,status)~.,
                 fittingFunction= BSWiMS.model,
                 classSamplingType = "Ba",
                 trainFraction = 0.75,
                 repetitions = 50,
                 loops=1,
 )

.-.-.-.–.-.-.–.-.-.-10 Tested: 552 Avg. Selected: 16.4 Min Tests: 1 Max Tests: 10 Mean Tests: 5.036232 . MAD: 1.091455 .-.-.–.-.–.-.-.–.-.-20 Tested: 562 Avg. Selected: 18.7 Min Tests: 1 Max Tests: 17 Mean Tests: 9.893238 . MAD: 1.068272 .-.-.-.-.-.-.–.–.-.-30 Tested: 564 Avg. Selected: 19.2 Min Tests: 3 Max Tests: 25 Mean Tests: 14.78723 . MAD: 1.041362 .–.-.-.-.-.—.-.-.-.-40 Tested: 564 Avg. Selected: 18.55 Min Tests: 4 Max Tests: 32 Mean Tests: 19.71631 . MAD: 1.038173 .-.—.-.–.–.—.-.–.–.-50 Tested: 564 Avg. Selected: 18.56 Min Tests: 6 Max Tests: 39 Mean Tests: 24.64539 . MAD: 1.041094


pander::pander(cbind(cvBSWiMSRaw$featureFrequency[cvBSWiMSRaw$featureFrequency>20]))
FAQ 50
RAVLT_immediate 50
ABETA 49
ADAS13 48
PTAU 48
TAU 45
ADAS11 44
M_ST24CV 31
M_ST29SV 29
APOE4 28
RAVLT_perc_forgetting 22
RD_ST52TS 21

par(op)
survmtest <- cvBSWiMSRaw$survMedianTest
survmtest <- survmtest[complete.cases(survmtest),]

prBin <- predictionStats_binary(cvBSWiMSRaw$survMedianTrain[,c(2,3)],"Train: MCI to  AD Conversion")

prBin <- predictionStats_binary(survmtest[,c(2,3)],"BSWiMS: MCI to  AD Conversion")

allBinROC <- prBin


pander::pander(prBin$aucs)
est lower upper
0.874 0.845 0.903
pander::pander(prBin$CM.analysis$tab)
  Outcome + Outcome - Total
Test + 160 89 249
Test - 31 284 315
Total 191 373 564

par(op)
ho <- mean(survmtest$Outcome)
timeInterval <- mean(survmtest[survmtest$Outcome==0,"Times"])
pgzero <- ppoisGzero(survmtest$LinearPredictorsMedian,ho)
rsdata <- cbind(survmtest$Outcome,pgzero,survmtest$Times)
riskAnalysis <- RRPlot(rsdata,riskTimeInterval=timeInterval,title="BSWiMS")

[1] 0.3386525 [1] 0.3386525 1.0000000 [1] 1.0079364 0.9638157 0.3942505 3.4912148 13.4967349 25.1387635 0.0000000 [8] 1.0000000



pander::pander(riskAnalysis$keyPoints)
  Thr RR RR_LCI RR_UCI SEN SPE BACC NetBenefit
@:0.9 0.4233 4.35 3.416 5.53 0.691 0.896 0.794 0.169
@:0.8 0.2843 6.10 4.340 8.56 0.838 0.796 0.817 0.220
@MAX_BACC 0.2456 7.55 5.073 11.22 0.880 0.768 0.824 0.240
@MAX_RR 0.0459 197.61 0.404 96599.50 1.000 0.157 0.578 0.311
@SEN100 0.0459 197.61 0.404 96599.50 1.000 0.157 0.578 0.311
p(0.5) 0.5000 3.70 2.999 4.56 0.597 0.923 0.760 0.131

pander::pander(riskAnalysis$c.index)
  • C Index: 0.845

  • Dxy: 0.691

  • S.D.: 0.025

  • n: 564

  • missing: 0

  • uncensored: 191

  • Relevant Pairs: 142910

  • Concordant: 120806

  • Uncertain: 174472

  • cstatCI:

    mean.C Index median lower upper
    0.845 0.845 0.82 0.869
pander::pander(riskAnalysis$ROCAnalysis$aucs)
est lower upper
0.874 0.845 0.903
pander::pander(riskAnalysis$cenAUC)

0.897

pander::pander(riskAnalysis$ROCAnalysis$ClassMetrics)
  • accci:

    50% 2.5% 97.5%
    0.807 0.775 0.839
  • senci:

    50% 2.5% 97.5%
    0.691 0.625 0.757
  • speci:

    50% 2.5% 97.5%
    0.866 0.832 0.901
  • aucci:

    50% 2.5% 97.5%
    0.779 0.741 0.816
  • berci:

    50% 2.5% 97.5%
    0.221 0.184 0.259
  • preci:

    50% 2.5% 97.5%
    0.724 0.661 0.791
  • F1ci:

    50% 2.5% 97.5%
    0.708 0.653 0.76
pander::pander(riskAnalysis$surdif)
Call: survival::Surv(eTime, eStatus) ~ class Chisq = 285.397124 on 2 degrees of freedom, p = 0.000000
  N Observed Expected (O-E)^2/E (O-E)^2/V
class=0 313 31 127.6 73.17 227.77
class=1 69 28 22.2 1.53 1.74
class=2 182 132 41.2 200.27 264.37

2.1.4 Cross Validation Cog Features


survCol <- c("TimeToEvent","status")
OnlyCogTest <- c("ADAS11",
                 "ADAS13",
                 "MMSE",
                 "RAVLT_immediate",
                 "RAVLT_learning",
                 "RAVLT_forgetting",
                 "RAVLT_perc_forgetting",
                 "FAQ")

cvBSWiMSGog <- randomCV(TADPOLECrossMRI[,c(survCol,OnlyCogTest)],
                 Surv(TimeToEvent,status)~.,
                 fittingFunction= BSWiMS.model,
                trainSampleSets= cvBSWiMSRaw$trainSamplesSets,
                loops=1,
 )

.-.-.-.-.-..-..-.-10 Tested: 552 Avg. Selected: 5.4 Min Tests: 1 Max Tests: 10 Mean Tests: 5.036232 . MAD: 0.953651 ..-.-.-..-.–.-.-.–20 Tested: 562 Avg. Selected: 5.1 Min Tests: 1 Max Tests: 17 Mean Tests: 9.893238 . MAD: 0.9726915 .-.-.-..–.-..-.-.–30 Tested: 564 Avg. Selected: 5.033333 Min Tests: 3 Max Tests: 25 Mean Tests: 14.78723 . MAD: 0.9744807 .-.–.-.-..–.-..-.-40 Tested: 564 Avg. Selected: 4.95 Min Tests: 4 Max Tests: 32 Mean Tests: 19.71631 . MAD: 0.9693289 ..–.-.–.–.–.–.-..50 Tested: 564 Avg. Selected: 4.94 Min Tests: 6 Max Tests: 39 Mean Tests: 24.64539 . MAD: 0.9632637


pander::pander(cbind(cvBSWiMSGog$featureFrequency[cvBSWiMSGog$featureFrequency>20]))
ADAS13 50
FAQ 50
RAVLT_immediate 46
RAVLT_perc_forgetting 30
RAVLT_forgetting 23
ADAS11 22

par(op)
survmtest <- cvBSWiMSGog$survMedianTest
survmtest <- survmtest[complete.cases(survmtest),]

prBin <- predictionStats_binary(cvBSWiMSGog$survMedianTrain[,c(2,3)],"Train: MCI to  AD Conversion")

prBin <- predictionStats_binary(survmtest[,c(2,3)],"Cognitive: MCI to  AD Conversion")

allBinCog <- prBin

pander::pander(prBin$aucs)
est lower upper
0.839 0.805 0.873
pander::pander(prBin$CM.analysis$tab)
  Outcome + Outcome - Total
Test + 145 84 229
Test - 46 289 335
Total 191 373 564

par(op)
ho <- mean(survmtest$Outcome)
timeInterval <- mean(survmtest[survmtest$Outcome==0,"Times"])
pgzero <- ppoisGzero(survmtest$LinearPredictorsMedian,ho)
rsdata <- cbind(survmtest$Outcome,pgzero,survmtest$Times)
riskAnalysis <- RRPlot(rsdata,riskTimeInterval=timeInterval,title="Cognitive")

[1] 0.3386525 [1] 0.3386525 1.0000000 [1] 1.0409362 0.9653607 0.3942505 3.4912148 12.9204575 22.3903077 0.0000000 [8] 1.0000000



pander::pander(riskAnalysis$keyPoints)
  Thr RR RR_LCI RR_UCI SEN SPE BACC NetBenefit
@:0.9 0.4162 3.62 2.910 4.51 0.623 0.8947 0.759 0.149
@:0.8 0.2767 4.50 3.375 5.99 0.775 0.7956 0.785 0.202
@MAX_BACC 0.2638 4.91 3.617 6.67 0.801 0.7848 0.793 0.212
@MAX_RR 0.0564 20.08 2.882 139.88 0.995 0.1562 0.575 0.303
@SEN100 0.0396 110.27 0.227 53638.34 1.000 0.0912 0.546 0.314
p(0.5) 0.5011 3.12 2.582 3.76 0.487 0.9367 0.712 0.106

pander::pander(riskAnalysis$c.index)
  • C Index: 0.828

  • Dxy: 0.656

  • S.D.: 0.0273

  • n: 564

  • missing: 0

  • uncensored: 191

  • Relevant Pairs: 142910

  • Concordant: 118346

  • Uncertain: 174472

  • cstatCI:

    mean.C Index median lower upper
    0.828 0.828 0.8 0.852
pander::pander(riskAnalysis$ROCAnalysis$aucs)
est lower upper
0.839 0.805 0.873
pander::pander(riskAnalysis$cenAUC)

0.86

pander::pander(riskAnalysis$ROCAnalysis$ClassMetrics)
  • accci:

    50% 2.5% 97.5%
    0.785 0.75 0.817
  • senci:

    50% 2.5% 97.5%
    0.622 0.554 0.689
  • speci:

    50% 2.5% 97.5%
    0.869 0.833 0.902
  • aucci:

    50% 2.5% 97.5%
    0.746 0.707 0.782
  • berci:

    50% 2.5% 97.5%
    0.254 0.218 0.293
  • preci:

    50% 2.5% 97.5%
    0.707 0.64 0.777
  • F1ci:

    50% 2.5% 97.5%
    0.661 0.603 0.717
pander::pander(riskAnalysis$surdif)
Call: survival::Surv(eTime, eStatus) ~ class Chisq = 247.799027 on 2 degrees of freedom, p = 0.000000
  N Observed Expected (O-E)^2/E (O-E)^2/V
class=0 327 43 129.9 58.12 187.63
class=1 69 29 23.9 1.11 1.27
class=2 168 119 37.2 179.43 230.65

2.1.5 Cross Validation Fluid Features


OnlyFluid <- c("ABETA","TAU","PTAU","APOE4")

cvBSWiMSFluid <- randomCV(TADPOLECrossMRI[,c(survCol,OnlyFluid)],
                 Surv(TimeToEvent,status)~.,
                 fittingFunction= BSWiMS.model,
                trainSampleSets= cvBSWiMSRaw$trainSamplesSets,
                loops=1,
 )

……….10 Tested: 552 Avg. Selected: 3.3 Min Tests: 1 Max Tests: 10 Mean Tests: 5.036232 . MAD: 0.725791 .-.-..-….-..20 Tested: 562 Avg. Selected: 3.05 Min Tests: 1 Max Tests: 17 Mean Tests: 9.893238 . MAD: 0.7076415 …-…….30 Tested: 564 Avg. Selected: 3.133333 Min Tests: 3 Max Tests: 25 Mean Tests: 14.78723 . MAD: 0.7051373 …..-.-….40 Tested: 564 Avg. Selected: 3.2 Min Tests: 4 Max Tests: 32 Mean Tests: 19.71631 . MAD: 0.7058679 ……….50 Tested: 564 Avg. Selected: 3.26 Min Tests: 6 Max Tests: 39 Mean Tests: 24.64539 . MAD: 0.7084522


pander::pander(cbind(cvBSWiMSFluid$featureFrequency[cvBSWiMSFluid$featureFrequency>20]))
ABETA 50
TAU 50
PTAU 43

par(op)
survmtest <- cvBSWiMSFluid$survMedianTest
survmtest <- survmtest[complete.cases(survmtest),]

prBin <- predictionStats_binary(cvBSWiMSFluid$survMedianTrain[,c(2,3)],"Train: MCI to  AD Conversion")

prBin <- predictionStats_binary(survmtest[,c(2,3)],"CSF + Apoe: MCI to  AD Conversion")

allBinFluid <- prBin
pander::pander(prBin$aucs)
est lower upper
0.782 0.742 0.821
pander::pander(prBin$CM.analysis$tab)
  Outcome + Outcome - Total
Test + 161 154 315
Test - 30 219 249
Total 191 373 564

par(op)
ho <- mean(survmtest$Outcome)
timeInterval <- mean(survmtest[survmtest$Outcome==0,"Times"])
pgzero <- ppoisGzero(survmtest$LinearPredictorsMedian,ho)
rsdata <- cbind(survmtest$Outcome,pgzero,survmtest$Times)
riskAnalysis <- RRPlot(rsdata,riskTimeInterval=timeInterval,title="CSF + Apoe")

[1] 0.3386525 [1] 0.3386525 1.0000000 [1] 1.1362325 0.9646085 0.3942505 3.4912148 13.2010159 11.8572975 0.0000000 [8] 1.0000000



pander::pander(riskAnalysis$keyPoints)
  Thr RR RR_LCI RR_UCI SEN SPE BACC NetBenefit
@:0.9 0.4552 2.32 1.9123 2.81 0.403 0.8938 0.648 0.0713
@:0.8 0.3811 2.78 2.2142 3.48 0.623 0.7945 0.709 0.1215
@MAX_BACC 0.3481 3.49 2.6731 4.56 0.738 0.7489 0.744 0.1525
@MAX_RR 0.0732 16.88 2.4321 117.19 0.995 0.1329 0.564 0.2908
@SEN100 0.0430 35.06 0.0739 16646.28 1.000 0.0301 0.515 0.3097
p(0.5) 0.4990 2.01 1.6415 2.47 0.241 0.9340 0.587 0.0356

pander::pander(riskAnalysis$c.index)
  • C Index: 0.73

  • Dxy: 0.461

  • S.D.: 0.0358

  • n: 564

  • missing: 0

  • uncensored: 191

  • Relevant Pairs: 142910

  • Concordant: 104366

  • Uncertain: 174472

  • cstatCI:

    mean.C Index median lower upper
    0.73 0.73 0.694 0.762
pander::pander(riskAnalysis$ROCAnalysis$aucs)
est lower upper
0.782 0.742 0.821
pander::pander(riskAnalysis$cenAUC)

0.794

pander::pander(riskAnalysis$ROCAnalysis$ClassMetrics)
  • accci:

    50% 2.5% 97.5%
    0.718 0.683 0.755
  • senci:

    50% 2.5% 97.5%
    0.403 0.333 0.472
  • speci:

    50% 2.5% 97.5%
    0.882 0.847 0.915
  • aucci:

    50% 2.5% 97.5%
    0.642 0.602 0.681
  • berci:

    50% 2.5% 97.5%
    0.358 0.319 0.398
  • preci:

    50% 2.5% 97.5%
    0.636 0.549 0.723
  • F1ci:

    50% 2.5% 97.5%
    0.492 0.421 0.561
pander::pander(riskAnalysis$surdif)
Call: survival::Surv(eTime, eStatus) ~ class Chisq = 99.231263 on 2 degrees of freedom, p = 0.000000
  N Observed Expected (O-E)^2/E (O-E)^2/V
class=0 363 72 132.0 27.30 90.9
class=1 80 42 26.3 9.42 11.1
class=2 121 77 32.7 60.06 73.6

2.1.6 Cross Validation MRI + APOE4 Features


allNames <- colnames(TADPOLECrossMRI)
MRInames <- allNames[!(allNames %in% OnlyFluid | allNames %in% OnlyCogTest)]

cvBSWiMSMRI <- randomCV(TADPOLECrossMRI[,c(MRInames,"APOE4")],
                 Surv(TimeToEvent,status)~.,
                 fittingFunction= BSWiMS.model,
                trainSampleSets= cvBSWiMSRaw$trainSamplesSets,
                loops=1,
 )

.–.—..-.-.-.–..-.-10 Tested: 552 Avg. Selected: 19.2 Min Tests: 1 Max Tests: 10 Mean Tests: 5.036232 . MAD: 0.6937982 .-.-..–.-.–.-.—.——-.—-20 Tested: 562 Avg. Selected: 21.7 Min Tests: 1 Max Tests: 17 Mean Tests: 9.893238 . MAD: 0.6903093 .——.-..-..-.–.–..-30 Tested: 564 Avg. Selected: 22.36667 Min Tests: 3 Max Tests: 25 Mean Tests: 14.78723 . MAD: 0.6936149 .—-.——-.–.—..—..–..40 Tested: 564 Avg. Selected: 23.475 Min Tests: 4 Max Tests: 32 Mean Tests: 19.71631 . MAD: 0.692957 .—-..–.-.—.-.-..—–.–50 Tested: 564 Avg. Selected: 22.82 Min Tests: 6 Max Tests: 39 Mean Tests: 24.64539 . MAD: 0.6952957


pander::pander(cbind(cvBSWiMSMRI$featureFrequency[cvBSWiMSMRI$featureFrequency>20]))
APOE4 50
M_ST29SV 48
M_ST12SV 43
M_ST40CV 43
M_ST24CV 42
M_ST24TA 38
RD_ST31TA 38
M_ST13TA 35
RD_ST52TS 33
M_ST31CV 29
M_ST52TA 28
M_ST13CV 22
M_ST40SA 22
M_ST26CV 21
M_ST56SA 21

par(op)
survmtest <- cvBSWiMSMRI$survMedianTest
survmtest <- survmtest[complete.cases(survmtest),]

prBin <- predictionStats_binary(cvBSWiMSMRI$survMedianTrain[,c(2,3)],"Train: MCI to  AD Conversion")

prBin <- predictionStats_binary(survmtest[,c(2,3)],"MRI + APOE4: MCI to  AD Conversion")

allBinMRI <- prBin

pander::pander(prBin$aucs)
est lower upper
0.791 0.752 0.829
pander::pander(prBin$CM.analysis$tab)
  Outcome + Outcome - Total
Test + 154 136 290
Test - 37 237 274
Total 191 373 564

par(op)
ho <- mean(survmtest$Outcome)
timeInterval <- mean(survmtest[survmtest$Outcome==0,"Times"])
pgzero <- ppoisGzero(survmtest$LinearPredictorsMedian,ho)
rsdata <- cbind(survmtest$Outcome,pgzero,survmtest$Times)
riskAnalysis <- RRPlot(rsdata,riskTimeInterval=timeInterval,title="MRI + APOE4")

[1] 0.3386525 [1] 0.3386525 1.0000000 [1] 1.0054812 0.9592568 0.3942505 3.4912148 15.1972127 16.2401951 0.0000000 [8] 1.0000000



pander::pander(riskAnalysis$keyPoints)
  Thr RR RR_LCI RR_UCI SEN SPE BACC NetBenefit
@:0.9 0.4981 2.65 2.18 3.22 0.471 0.896 0.684 0.0769
@:0.8 0.3817 2.90 2.31 3.65 0.639 0.796 0.717 0.1244
@MAX_BACC 0.2554 5.68 3.79 8.53 0.885 0.633 0.759 0.2084
@MAX_RR 0.1199 8.13 2.10 31.46 0.990 0.125 0.557 0.2552
@SEN100 0.0709 1.00 0.00 0.00 1.000 0.000 0.500 0.2882
p(0.5) 0.5000 2.69 2.21 3.26 0.471 0.900 0.686 0.0798

pander::pander(riskAnalysis$c.index)
  • C Index: 0.762

  • Dxy: 0.524

  • S.D.: 0.0346

  • n: 564

  • missing: 0

  • uncensored: 191

  • Relevant Pairs: 142910

  • Concordant: 108910

  • Uncertain: 174472

  • cstatCI:

    mean.C Index median lower upper
    0.762 0.762 0.728 0.795
pander::pander(riskAnalysis$ROCAnalysis$aucs)
est lower upper
0.791 0.752 0.829
pander::pander(riskAnalysis$cenAUC)

0.811

pander::pander(riskAnalysis$ROCAnalysis$ClassMetrics)
  • accci:

    50% 2.5% 97.5%
    0.738 0.702 0.771
  • senci:

    50% 2.5% 97.5%
    0.471 0.403 0.541
  • speci:

    50% 2.5% 97.5%
    0.874 0.839 0.908
  • aucci:

    50% 2.5% 97.5%
    0.672 0.633 0.71
  • berci:

    50% 2.5% 97.5%
    0.328 0.29 0.367
  • preci:

    50% 2.5% 97.5%
    0.657 0.578 0.736
  • F1ci:

    50% 2.5% 97.5%
    0.549 0.482 0.608
pander::pander(riskAnalysis$surdif)
Call: survival::Surv(eTime, eStatus) ~ class Chisq = 148.436216 on 2 degrees of freedom, p = 0.000000
  N Observed Expected (O-E)^2/E (O-E)^2/V
class=0 358 69 132.7 30.61 103.874
class=1 69 32 27.4 0.76 0.927
class=2 137 90 30.8 113.61 138.515

2.1.7 Cross Validation MRI and Cog Features


cvBSWiMSMRICog <- randomCV(TADPOLECrossMRI[,c(MRInames,OnlyCogTest)],
                 Surv(TimeToEvent,status)~.,
                 fittingFunction= BSWiMS.model,
                trainSampleSets= cvBSWiMSRaw$trainSamplesSets,
                loops=1,
 )

.—.-.-.-.-.-.–.-.-.-10 Tested: 552 Avg. Selected: 15.1 Min Tests: 1 Max Tests: 10 Mean Tests: 5.036232 . MAD: 1.048966 .-.–.–.-.–.-.—.–.-.–20 Tested: 562 Avg. Selected: 14.9 Min Tests: 1 Max Tests: 17 Mean Tests: 9.893238 . MAD: 1.049335 .–.—.—-.–.-.–.-.-.-.–30 Tested: 564 Avg. Selected: 15.2 Min Tests: 3 Max Tests: 25 Mean Tests: 14.78723 . MAD: 1.035853 .-.-.-.-.-.–.-.–.-.–40 Tested: 564 Avg. Selected: 15.35 Min Tests: 4 Max Tests: 32 Mean Tests: 19.71631 . MAD: 1.023489 .–.-.-.-.–.–.–.-.–.–50 Tested: 564 Avg. Selected: 15.18 Min Tests: 6 Max Tests: 39 Mean Tests: 24.64539 . MAD: 1.011273


pander::pander(cbind(cvBSWiMSMRICog$featureFrequency[cvBSWiMSMRICog$featureFrequency>20]))
FAQ 50
RAVLT_immediate 50
ADAS13 48
ADAS11 41
RAVLT_perc_forgetting 36
M_ST29SV 31
M_ST14TS 23
RAVLT_learning 22

par(op)
survmtest <- cvBSWiMSMRICog$survMedianTest
survmtest <- survmtest[complete.cases(survmtest),]

prBin <- predictionStats_binary(cvBSWiMSMRICog$survMedianTrain[,c(2,3)],"Train: MCI to  AD Conversion")

prBin <- predictionStats_binary(survmtest[,c(2,3)],"MRI + Cog: MCI to  AD Conversion")

allBinMRICog <- prBin
pander::pander(prBin$aucs)
est lower upper
0.853 0.821 0.885
pander::pander(prBin$CM.analysis$tab)
  Outcome + Outcome - Total
Test + 152 90 242
Test - 39 283 322
Total 191 373 564

par(op)
ho <- mean(survmtest$Outcome)
timeInterval <- mean(survmtest[survmtest$Outcome==0,"Times"])
pgzero <- ppoisGzero(survmtest$LinearPredictorsMedian,ho)
rsdata <- cbind(survmtest$Outcome,pgzero,survmtest$Times)
riskAnalysis <- RRPlot(rsdata,riskTimeInterval=timeInterval,title="MRI + Cog")

[1] 0.3386525 [1] 0.3386525 1.0000000 [1] 1.0285138 0.9635129 0.3942505 3.4912148 13.6096798 23.4405342 0.0000000 [8] 1.0000000



pander::pander(riskAnalysis$keyPoints)
  Thr RR RR_LCI RR_UCI SEN SPE BACC NetBenefit
@:0.9 0.4176 3.90 3.110 4.89 0.649 0.898 0.774 0.156
@:0.8 0.2881 4.94 3.650 6.67 0.796 0.797 0.796 0.205
@MAX_BACC 0.3320 4.95 3.741 6.54 0.764 0.851 0.808 0.198
@MAX_RR 0.0695 37.95 5.398 266.84 0.995 0.275 0.635 0.300
@SEN100 0.0292 107.45 0.221 52251.14 1.000 0.089 0.545 0.320
p(0.5) 0.4993 3.37 2.772 4.09 0.529 0.937 0.733 0.121

pander::pander(riskAnalysis$c.index)
  • C Index: 0.832

  • Dxy: 0.663

  • S.D.: 0.0268

  • n: 564

  • missing: 0

  • uncensored: 191

  • Relevant Pairs: 142910

  • Concordant: 118834

  • Uncertain: 174472

  • cstatCI:

    mean.C Index median lower upper
    0.832 0.832 0.805 0.858
pander::pander(riskAnalysis$ROCAnalysis$aucs)
est lower upper
0.853 0.821 0.885
pander::pander(riskAnalysis$cenAUC)

0.876

pander::pander(riskAnalysis$ROCAnalysis$ClassMetrics)
  • accci:

    50% 2.5% 97.5%
    0.793 0.761 0.825
  • senci:

    50% 2.5% 97.5%
    0.65 0.583 0.718
  • speci:

    50% 2.5% 97.5%
    0.867 0.831 0.899
  • aucci:

    50% 2.5% 97.5%
    0.758 0.72 0.795
  • berci:

    50% 2.5% 97.5%
    0.242 0.205 0.28
  • preci:

    50% 2.5% 97.5%
    0.714 0.644 0.778
  • F1ci:

    50% 2.5% 97.5%
    0.68 0.622 0.731
pander::pander(riskAnalysis$surdif)
Call: survival::Surv(eTime, eStatus) ~ class Chisq = 257.364216 on 2 degrees of freedom, p = 0.000000
  N Observed Expected (O-E)^2/E (O-E)^2/V
class=0 322 39 129.0 62.79 201.3
class=1 68 28 22.7 1.22 1.4
class=2 174 124 39.3 182.73 238.6

2.1.8 Comparing ROC AUC


ROCAUC <- rbind(All=allBinROC$aucs,
                Cog=allBinCog$aucs,
                CSF=allBinFluid$aucs,
                MRI=allBinMRI$aucs,
                COG_MRI=allBinMRICog$aucs)

ROCAUC <- ROCAUC[order(-ROCAUC[,1]),]
pander::pander(ROCAUC)
  est lower upper
All 0.874 0.845 0.903
COG_MRI 0.853 0.821 0.885
Cog 0.839 0.805 0.873
MRI 0.791 0.752 0.829
CSF 0.782 0.742 0.821

pander::pander(roc.test(allBinROC$ROC.analysis$roc.predictor,allBinMRICog$ROC.analysis$roc.predictor))
DeLong’s test for two correlated ROC curves: allBinROC$ROC.analysis$roc.predictor and allBinMRICog$ROC.analysis$roc.predictor
Test statistic P value Alternative hypothesis AUC of roc1 AUC of roc2
3.02 0.00249 * * two.sided 0.874 0.853
pander::pander(roc.test(allBinMRICog$ROC.analysis$roc.predictor,allBinCog$ROC.analysis$roc.predictor))
DeLong’s test for two correlated ROC curves: allBinMRICog$ROC.analysis$roc.predictor and allBinCog$ROC.analysis$roc.predictor
Test statistic P value Alternative hypothesis AUC of roc1 AUC of roc2
1.87 0.0612 two.sided 0.853 0.839
pander::pander(roc.test(allBinMRICog$ROC.analysis$roc.predictor,allBinMRI$ROC.analysis$roc.predictor))
DeLong’s test for two correlated ROC curves: allBinMRICog$ROC.analysis$roc.predictor and allBinMRI$ROC.analysis$roc.predictor
Test statistic P value Alternative hypothesis AUC of roc1 AUC of roc2
3.67 0.00024 * * * two.sided 0.853 0.791
pander::pander(roc.test(allBinMRICog$ROC.analysis$roc.predictor,allBinFluid$ROC.analysis$roc.predictor))
DeLong’s test for two correlated ROC curves: allBinMRICog$ROC.analysis$roc.predictor and allBinFluid$ROC.analysis$roc.predictor
Test statistic P value Alternative hypothesis AUC of roc1 AUC of roc2
3.05 0.00232 * * two.sided 0.853 0.782
pander::pander(roc.test(allBinCog$ROC.analysis$roc.predictor,allBinMRI$ROC.analysis$roc.predictor))
DeLong’s test for two correlated ROC curves: allBinCog$ROC.analysis$roc.predictor and allBinMRI$ROC.analysis$roc.predictor
Test statistic P value Alternative hypothesis AUC of roc1 AUC of roc2
2.22 0.0263 * two.sided 0.839 0.791
pander::pander(roc.test(allBinMRI$ROC.analysis$roc.predictor,allBinFluid$ROC.analysis$roc.predictor))
DeLong’s test for two correlated ROC curves: allBinMRI$ROC.analysis$roc.predictor and allBinFluid$ROC.analysis$roc.predictor
Test statistic P value Alternative hypothesis AUC of roc1 AUC of roc2
0.386 0.7 two.sided 0.791 0.782
survmtest <- cvBSWiMSRaw$survMedianTest
survmtest <- survmtest[complete.cases(survmtest),]
prBin <- predictionStats_binary(survmtest[,c(2,3)],"MCI to  AD Conversion")
par(new=TRUE)
plot(allBinMRICog$ROC.analysis$roc.predictor,col="red")
par(new=TRUE)
plot(allBinCog$ROC.analysis$roc.predictor,col="blue")
par(new=TRUE)
plot(allBinMRI$ROC.analysis$roc.predictor,col="green")
par(new=TRUE)
plot(allBinFluid$ROC.analysis$roc.predictor,col="cyan")
legend("bottomright",
       legend=c("All","MRI+COG","COG","MRI","CSF"),
       lty=1,
       col=c("black","red","blue","green","cyan"))

2.1.9 Learning


TADPOLE_Conv_TRAINNorm <- FRESAScale(TADPOLE_Conv_TRAIN)
TADPOLE_Conv_TRAINNorm <- TADPOLE_Conv_TRAINNorm$scaledData
TADPOLE_Conv_TRAINNorm$TimeToEvent <- TADPOLE_Conv_TRAIN$TimeToEvent
TADPOLE_Conv_TESTNorm <- FRESAScale(TADPOLE_Conv_TEST,TADPOLE_Conv_TRAIN)$scaledData
TADPOLE_Conv_TESTNorm$TimeToEvent <- TADPOLE_Conv_TEST$TimeToEvent
  
bConvml <- BSWiMS.model(Surv(TimeToEvent,status)~1,TADPOLE_Conv_TRAINNorm,loops=20,NumberofRepeats = 20)

[++-+-++-+-++-++-++-+++-+++-+-++-+–++-++-+-++–++-++-+–++-]……

#bConvml <- BSWiMS.model(Surv(TimeToEvent,status)~1,TADPOLE_Conv_TRAIN,loops=20,NumberofRepeats = 20)
pander::pander(bConvml$bagging$Jaccard.SM)

0.286


fs <- bConvml$bagging$frequencyTable
barplot(fs[order(-fs)],las=2,main="Selected Features",cex.names = 0.5)

sm <- summary(bConvml)
summary(TADPOLE_Conv_TRAINNorm$M_ST39CV)

Min. 1st Qu. Median Mean 3rd Qu. Max. -2.7659 -0.5863 0.2002 0.0000 0.6914 2.4492

pander::pander(bConvml$formula.list)

Surv(TimeToEvent, status) ~ 1 + FAQ + RAVLT_immediate + ADAS13 + ABETA + PTAU + M_ST13TA + M_ST56SA + RD_ST34CV + RD_ST49SA, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + RD_ST34SA + M_ST29SV + M_ST56CV + APOE4, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + ADAS13 + FAQ + RAVLT_immediate + ABETA + PTAU + M_ST56SA + M_ST13TA + RD_ST49SA + RD_ST34CV, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + RAVLT_immediate + FAQ + ADAS13 + ABETA + PTAU + M_ST56CV, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + M_ST29SV + RD_ST34SA + M_ST14TS + M_ST11SV + M_ST56SA + APOE4, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + FAQ + RAVLT_immediate + ABETA + PTAU + M_ST56SA + M_ST13TA + RD_ST34CV, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + ADAS13 + FAQ + RAVLT_immediate + ABETA + PTAU + M_ST59CV + M_ST11SV + M_ST56SA + RD_ST49SA, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + M_ST29SV + M_ST56CV + APOE4, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + RAVLT_immediate + ADAS13 + FAQ + ABETA + M_ST56SA + M_ST13TA + PTAU, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + M_ST11SV + M_ST56CV + M_ST24CV + M_ST59SA + RD_ST49SA + APOE4 + RD_ST34SA, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + FAQ + ADAS13 + RAVLT_immediate + ABETA + TAU + M_ST39CV + M_ST56SA + RD_ST34CV + M_ST13CV, Surv(TimeToEvent, status) ~ 1 + ADAS11 + PTAU + RAVLT_perc_forgetting + M_ST29SV + M_ST11SV + M_ST14TS + M_ST59SA + RD_ST49SA, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + ADAS13 + FAQ + RAVLT_immediate + M_ST56SA + ABETA + TAU + M_ST13CV + M_ST39SA, Surv(TimeToEvent, status) ~ 1 + ADAS11 + APOE4 + M_ST56CV + PTAU + M_ST12SV, Surv(TimeToEvent, status) ~ 1 + RAVLT_perc_forgetting + M_ST29SV + M_ST13TA + MMSE + RD_ST34SA + M_ST14TS + M_ST59SA, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + RAVLT_immediate + FAQ + ADAS13 + ABETA + M_ST56CV + PTAU, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + M_ST29SV + M_ST11SV + M_ST14TS + M_ST56SA + RD_ST34SA, Surv(TimeToEvent, status) ~ 1 + RAVLT_perc_forgetting + MMSE + M_ST12SV + APOE4 + M_ST13TA, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + FAQ + RAVLT_immediate + ABETA + M_ST56SA + M_ST13TA + RD_ST15TS + TAU + RD_ST34CV, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + FAQ + RAVLT_immediate + ADAS13 + ABETA + PTAU + M_ST56SA + M_ST13TA + RD_ST34CV + RD_ST49SA, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + RAVLT_perc_forgetting + M_ST56CV + APOE4 + M_ST29SV + M_ST14TS, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + ADAS13 + FAQ + RAVLT_immediate + M_ST56SA + ABETA + M_ST13TA + PTAU + RD_ST34CV + RD_ST49SA, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + FAQ + ADAS13 + RAVLT_immediate + M_ST56SA + PTAU + ABETA + M_ST13TA + RD_ST49SA + RD_ST34CV, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + M_ST56CV + M_ST14TS + M_ST29SV + APOE4, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + FAQ + ADAS13 + RAVLT_immediate + ABETA + M_ST56SA + M_ST13TA + PTAU + RD_ST34CV + RD_ST49SA, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + RD_ST34SA + M_ST56CV + APOE4 + RAVLT_perc_forgetting + M_ST29SV + M_ST14TS, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + FAQ + ADAS13 + RAVLT_immediate + ABETA + M_ST56SA + PTAU + M_ST13TA + RD_ST34CV + RD_ST49SA, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + FAQ + RAVLT_immediate + ABETA + TAU + M_ST11SV + M_ST59SA + RD_ST15TS + M_ST24CV, Surv(TimeToEvent, status) ~ 1 + ADAS13 + PTAU + M_ST56SA + M_ST29SV + M_ST26CV, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + ADAS13 + RAVLT_immediate + FAQ + M_ST56SA + M_ST13TA + ABETA + PTAU + RD_ST34CV + RD_ST49SA, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + RD_ST34SA + M_ST11SV + M_ST29SV + APOE4 + M_ST59SA, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + FAQ + ADAS13 + RAVLT_immediate + ABETA + PTAU + M_ST56CV + M_ST13CV, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + M_ST29SV + M_ST11SV + M_ST56SA + APOE4 + M_ST14TS, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + RAVLT_immediate + FAQ + ADAS13 + ABETA + TAU + M_ST56SA + M_ST13TA + RD_ST34CV + RD_ST49SA, =-=End=-=, Surv(TimeToEvent, status) ~ 1 + FAQ + ADAS13 + RAVLT_immediate + M_ST56SA + ABETA + PTAU + M_ST13TA + RD_ST34CV + RD_ST49SA, Surv(TimeToEvent, status) ~ 1 + ADAS11 + TAU + M_ST56CV + M_ST11SV + APOE4 + M_ST24CV + M_ST59SA and =-=End=-=

pander::pander(bConvml$bagging$predfit$coef)
V1 V3 V5 V10 V14 V15 V18 V19 V28 V29 V34
0.061 5.89e-17 0.35 0.136 -0.262 0.0422 0.159 0.0733 0.27 -0.021 0.392
cnames <- names(bConvml$bagging$bagged.model$coefficients)
pander::pander(cbind(
                      bConvml$bagging$bagged.model$coefficients,
                      bConvml$bagging$bagged.model$baggingAnalysis$coefficients[cnames],
                      bConvml$bagging$bagged.model$baggingAnalysis$wts[cnames],
                      bConvml$bagging$bagged.model$baggingAnalysis$avgLogPvalues[cnames],
                      bConvml$bagging$bagged.model$baggingAnalysis$RelativeFrequency[cnames])
)
(Intercept) 0.00e+00 NA NA NA NA
FAQ 2.46e-01 0.4578 3.98e-02 4.77 1.00
RAVLT_immediate -3.44e-01 -0.6401 3.98e-02 5.57 1.00
ABETA -2.08e-01 -0.3869 3.98e-02 3.35 1.00
M_ST56SA -2.16e-01 -0.3667 4.38e-02 5.06 1.00
ADAS13 1.24e-01 0.4061 2.52e-02 2.60 0.90
PTAU 1.38e-02 0.3358 3.39e-03 3.80 0.90
TAU 3.14e-01 0.3815 7.64e-02 4.80 0.80
M_ST13TA -2.04e-01 -0.4165 4.85e-02 8.36 0.75
ADAS11 1.91e-01 0.5819 3.74e-02 8.11 0.65
RD_ST34CV -8.86e-02 -0.2497 4.05e-02 4.03 0.65
RD_ST49SA -8.66e-02 -0.2180 4.54e-02 2.94 0.65
M_ST29SV -1.17e-01 -0.4415 3.27e-02 3.56 0.60
APOE4 3.15e-01 0.7243 5.38e-02 3.46 0.60
M_ST56CV -2.26e-02 -0.2461 1.24e-02 4.59 0.55
M_ST11SV -1.56e-01 -0.3062 8.40e-02 3.89 0.45
M_ST14TS 5.94e-02 0.2248 4.90e-02 3.26 0.40
RD_ST34SA -1.02e-01 -0.2870 7.55e-02 2.74 0.35
M_ST59SA -8.52e-02 -0.2818 7.48e-02 3.67 0.30
RAVLT_perc_forgetting 7.07e-02 0.5214 4.03e-02 3.16 0.25
M_ST24CV -1.02e-01 -0.3723 1.36e-01 3.54 0.15
M_ST13CV -4.86e-13 -0.2404 1.00e-12 3.33 0.15
MMSE -3.99e-02 -0.2940 1.01e-01 2.69 0.10
M_ST12SV -3.66e-02 -0.3418 7.96e-02 3.35 0.10
RD_ST15TS -5.97e-02 -0.2581 1.72e-01 3.23 0.10
M_ST26CV -1.95e-13 -0.2891 1.00e-12 2.86 0.05
M_ST39CV -9.17e-14 -0.1361 1.00e-12 4.20 0.05
M_ST59CV -1.68e-13 -0.2491 1.00e-12 4.81 0.05
M_ST39SA -4.15e-14 -0.0615 1.00e-12 3.02 0.05
pander::pander(sm$coefficients)
  Estimate lower HR upper u.Accuracy r.Accuracy full.Accuracy u.AUC r.AUC full.AUC IDI NRI z.IDI z.NRI Delta.AUC Frequency
ADAS11 1.91e-01 1.463 1.789 2.189 0.668 0.722 0.752 0.679 0.757 0.782 0.06175 0.539 5.96 5.24 0.025417 0.65
M_ST13TA -2.04e-01 0.572 0.659 0.760 0.657 0.742 0.766 0.668 0.766 0.794 0.04056 0.663 5.44 6.72 0.027437 0.75
RAVLT_immediate -3.44e-01 0.400 0.527 0.695 0.673 0.755 0.769 0.718 0.787 0.800 0.04894 0.628 5.36 6.54 0.013008 1.00
TAU 3.14e-01 1.224 1.465 1.753 0.655 0.748 0.762 0.638 0.782 0.793 0.03016 0.544 4.37 5.31 0.010720 0.80
M_ST56SA -2.16e-01 0.586 0.693 0.819 0.566 0.759 0.768 0.577 0.789 0.797 0.02960 0.468 4.31 4.59 0.008198 1.00
FAQ 2.46e-01 1.273 1.581 1.963 0.708 0.732 0.769 0.688 0.767 0.800 0.03459 0.371 4.22 3.55 0.032788 1.00
M_ST59CV -1.68e-13 0.693 0.780 0.876 0.614 0.751 0.766 0.628 0.779 0.792 0.01627 0.307 4.16 2.92 0.013338 0.05
M_ST59SA -8.52e-02 0.645 0.754 0.883 0.546 0.749 0.749 0.554 0.783 0.782 0.02014 0.445 3.96 4.32 -0.000775 0.30
RD_ST34CV -8.86e-02 0.683 0.779 0.888 0.520 0.759 0.777 0.542 0.786 0.806 0.01663 0.443 3.90 4.40 0.020088 0.65
RAVLT_perc_forgetting 7.07e-02 1.224 1.684 2.319 0.652 0.728 0.738 0.673 0.750 0.762 0.03863 0.520 3.85 5.13 0.012586 0.25
M_ST39CV -9.17e-14 0.814 0.873 0.936 0.650 0.756 0.764 0.642 0.783 0.794 0.00924 0.346 3.83 3.30 0.011278 0.05
ABETA -2.08e-01 0.541 0.679 0.853 0.609 0.782 0.769 0.672 0.808 0.800 0.02112 0.430 3.76 4.56 -0.007637 1.00
M_ST29SV -1.17e-01 0.500 0.643 0.826 0.673 0.751 0.752 0.692 0.777 0.782 0.02558 0.498 3.69 4.89 0.005547 0.60
M_ST11SV -1.56e-01 0.625 0.736 0.868 0.622 0.743 0.752 0.635 0.771 0.784 0.01769 0.375 3.66 3.60 0.013446 0.45
M_ST12SV -3.66e-02 0.581 0.711 0.869 0.673 0.721 0.739 0.679 0.739 0.762 0.02226 0.421 3.58 4.05 0.022628 0.10
M_ST24CV -1.02e-01 0.557 0.689 0.852 0.645 0.737 0.750 0.647 0.774 0.784 0.02191 0.436 3.50 4.20 0.010169 0.15
PTAU 1.38e-02 1.165 1.399 1.680 0.662 0.759 0.772 0.644 0.790 0.798 0.02007 0.392 3.44 3.75 0.007735 0.90
APOE4 3.15e-01 1.357 2.063 3.136 0.594 0.739 0.749 0.603 0.765 0.777 0.02337 0.409 3.41 3.94 0.011835 0.60
RD_ST15TS -5.97e-02 0.661 0.773 0.903 0.520 0.746 0.753 0.555 0.781 0.790 0.01487 0.390 3.36 3.96 0.008388 0.10
M_ST13CV -4.86e-13 0.682 0.786 0.907 0.629 0.765 0.758 0.647 0.793 0.787 0.01359 0.364 3.28 3.52 -0.006338 0.15
M_ST39SA -4.15e-14 0.904 0.940 0.978 0.655 0.746 0.751 0.655 0.775 0.783 0.00326 0.254 3.10 2.41 0.007519 0.05
M_ST14TS 5.94e-02 1.094 1.252 1.433 0.594 0.747 0.752 0.598 0.775 0.782 0.01306 0.257 3.07 2.44 0.007519 0.40
M_ST26CV -1.95e-13 0.620 0.749 0.905 0.637 0.749 0.731 0.643 0.772 0.755 0.01495 0.406 2.99 3.89 -0.017097 0.05
RD_ST49SA -8.66e-02 0.699 0.804 0.925 0.503 0.764 0.773 0.538 0.792 0.800 0.01102 0.258 2.95 2.53 0.007946 0.65
RD_ST34SA -1.02e-01 0.619 0.750 0.911 0.515 0.740 0.751 0.544 0.764 0.780 0.01448 0.172 2.80 1.66 0.016271 0.35
M_ST56CV -2.26e-02 0.694 0.782 0.881 0.645 0.741 0.749 0.653 0.768 0.775 0.01087 0.262 2.79 2.48 0.007591 0.55
MMSE -3.99e-02 0.610 0.745 0.911 0.685 0.721 0.738 0.672 0.743 0.762 0.01543 0.384 2.76 3.67 0.019400 0.10
ADAS13 1.24e-01 1.130 1.501 1.993 0.713 0.781 0.780 0.721 0.809 0.808 0.01274 0.203 2.44 1.92 -0.000754 0.90
pander::pander(bConvml$univariate[bConvml$selectedfeatures,])
  Name RName ZUni
FAQ FAQ FAQ 7.57
RAVLT_immediate RAVLT_immediate RAVLT_immediate 10.41
ABETA ABETA ABETA 8.51
M_ST56SA M_ST56SA M_ST56SA 4.71
ADAS13 ADAS13 ADAS13 10.85
PTAU PTAU PTAU 5.59
TAU TAU TAU 5.29
M_ST13TA M_ST13TA M_ST13TA 7.42
ADAS11 ADAS11 ADAS11 9.39
RD_ST34CV RD_ST34CV RD_ST34CV 2.53
RD_ST49SA RD_ST49SA RD_ST49SA 1.82
M_ST29SV M_ST29SV M_ST29SV 8.57
APOE4 APOE4 APOE4 3.97
M_ST56CV M_ST56CV M_ST56CV 7.17
M_ST11SV M_ST11SV M_ST11SV 5.89
M_ST14TS M_ST14TS M_ST14TS 5.15
RD_ST34SA RD_ST34SA RD_ST34SA 2.91
M_ST59SA M_ST59SA M_ST59SA 3.24
RAVLT_perc_forgetting RAVLT_perc_forgetting RAVLT_perc_forgetting 7.08
M_ST24CV M_ST24CV M_ST24CV 7.09
M_ST13CV M_ST13CV M_ST13CV 6.71
MMSE MMSE MMSE 7.13
M_ST12SV M_ST12SV M_ST12SV 8.36
RD_ST15TS RD_ST15TS RD_ST15TS 2.14
M_ST26CV M_ST26CV M_ST26CV 7.12
M_ST39CV M_ST39CV M_ST39CV 6.44
M_ST59CV M_ST59CV M_ST59CV 6.33
M_ST39SA M_ST39SA M_ST39SA 6.67

#ptestl <- predict(bConvml,TADPOLE_Conv_TEST,type="lp")
ptestl <- predict(bConvml,TADPOLE_Conv_TESTNorm,type="lp")
boxplot(ptestl~TADPOLE_Conv_TEST$status)

#ptestr <- predict(bConvml,TADPOLE_Conv_TEST,type="risk")
ptestr <- predict(bConvml,TADPOLE_Conv_TESTNorm,type="risk")
eventCases <- subset(TADPOLE_Conv_TEST,status==1)
plot(1.0/ptestr[rownames(eventCases)]~eventCases$TimeToEvent)

pander::pander(cor.test(eventCases$TimeToEvent,1.0/ptestr[rownames(eventCases)],method="spearman"))
Spearman’s rank correlation rho: eventCases$TimeToEvent and 1/ptestr[rownames(eventCases)]
Test statistic P value Alternative hypothesis rho
18210 0.000551 * * * two.sided 0.44



perdsurv <- as.data.frame(cbind(Times=TADPOLE_Conv_TEST$TimeToEvent,
                  Outcome=TADPOLE_Conv_TEST$status,
                  LinearPredictors=ptestl,
                  ptestr))
boxplot(perdsurv$LinearPredictors~perdsurv$Outcome)

prSurv <- predictionStats_survival(perdsurv,"BSWiMS: MCI to  AD Conversion")

pander::pander(prSurv$CIRisk)
median lower upper
0.873 0.834 0.91
pander::pander(prSurv$CILp)
median lower upper
0.9 0.852 0.939
pander::pander(prSurv$spearmanCI)
50% 2.5% 97.5%
0.441 0.203 0.634

prBin <- predictionStats_binary(cbind(TADPOLE_Conv_TEST$status,ptestl),"BSWiMS: MCI to  AD Conversion")

pander::pander(prBin$aucs)
est lower upper
0.899 0.853 0.944
pander::pander(prBin$CM.analysis$tab)
  Outcome + Outcome - Total
Test + 56 34 90
Test - 2 78 80
Total 58 112 170





par(op)
ho <- mean(TADPOLE_Conv_TRAIN$status)
timeInterval <- mean(TADPOLE_Conv_TRAIN[TADPOLE_Conv_TRAIN$status==0,"TimeToEvent"])
pgzero <- ppoisGzero(perdsurv$LinearPredictors,ho)
rsdata <- cbind(perdsurv$Outcome,pgzero,perdsurv$Times)
riskAnalysis <- RRPlot(rsdata,riskTimeInterval=timeInterval,title="Test")

[1] 0.3411765 [1] 0.3411765 1.0000000 [1] 0.8996088 0.9408211 0.4599589 3.5649262 6.6280369 14.8752056 1.0000000 [8] 0.9534954



pander::pander(riskAnalysis$keyPoints)
  Thr RR RR_LCI RR_UCI SEN SPE BACC NetBenefit
@:0.9 0.480 4.71 2.963 7.50e+00 0.724 0.889 0.807 0.155
@:0.8 0.311 10.66 4.525 2.51e+01 0.914 0.781 0.847 0.235
@MAX_BACC 0.285 46.28 6.586 3.25e+02 0.983 0.738 0.860 0.256
@MAX_RR 0.186 300.69 0.614 1.47e+05 1.000 0.571 0.786 0.271
@SEN100 0.186 300.69 0.614 1.47e+05 1.000 0.571 0.786 0.271
p(0.5) 0.500 4.84 3.045 7.69e+00 0.724 0.899 0.812 0.153

pander::pander(riskAnalysis$c.index)
  • C Index: 0.874

  • Dxy: 0.747

  • S.D.: 0.0383

  • n: 170

  • missing: 0

  • uncensored: 58

  • Relevant Pairs: 13252

  • Concordant: 11576

  • Uncertain: 15470

  • cstatCI:

    mean.C Index median lower upper
    0.874 0.874 0.835 0.913
pander::pander(riskAnalysis$ROCAnalysis$aucs)
est lower upper
0.899 0.853 0.944
pander::pander(riskAnalysis$cenAUC)

0.928

pander::pander(riskAnalysis$ROCAnalysis$ClassMetrics)
  • accci:

    50% 2.5% 97.5%
    0.806 0.741 0.865
  • senci:

    50% 2.5% 97.5%
    0.726 0.607 0.836
  • speci:

    50% 2.5% 97.5%
    0.848 0.779 0.913
  • aucci:

    50% 2.5% 97.5%
    0.786 0.718 0.85
  • berci:

    50% 2.5% 97.5%
    0.214 0.15 0.282
  • preci:

    50% 2.5% 97.5%
    0.714 0.589 0.824
  • F1ci:

    50% 2.5% 97.5%
    0.719 0.615 0.803
pander::pander(riskAnalysis$surdif)
Call: survival::Surv(eTime, eStatus) ~ class Chisq = 83.430643 on 2 degrees of freedom, p = 0.000000
  N Observed Expected (O-E)^2/E (O-E)^2/V
class=0 88 5 35.87 26.57 71.78
class=1 23 11 7.65 1.46 1.69
class=2 59 42 14.47 52.37 72.24

2.1.10 The formula network

cmax <- apply(bConvml$bagging$formulaNetwork,2,max)
mcoef <- bConvml$bagging$bagged.model$coefficients
cnames <- names(cmax[cmax>=0.025])
#cnames <- cnames[abs(mcoef[cnames])>1.0e-10]
cmax <- cmax[cnames]
adma <- bConvml$bagging$formulaNetwork[cnames,cnames]

adma[adma<0.15] <- 0;
gr <- graph_from_adjacency_matrix(adma,mode = "undirected",diag = FALSE,weighted=TRUE)
gr$layout <- layout_with_fr

fc <- cluster_optimal(gr)
plot(fc, gr,
     edge.width=5*E(gr)$weight,
     vertex.size=20*cmax,
     vertex.label.cex=0.75,
     vertex.label.dist=0,
     main="MCI to Dementia Conversion")

par(op)

2.1.11 MCI to Dementia table


clusterFeatures <- fc$names

tableMCI_to_Dem <- sm$coefficients[clusterFeatures,
                                   c("Estimate",
                                     "lower",
                                     "HR",
                                     "upper",
                                     "full.AUC",
                                     "Delta.AUC",
                                     "z.IDI",
                                     "Frequency")]

nugget <- fc$membership
names(nugget) <- clusterFeatures

tableMCI_to_Dem$Cluster <- nugget[rownames(tableMCI_to_Dem)]

rnames <- clusterFeatures[str_detect(clusterFeatures,"ST")]
frnames <- rnames
rnames <- str_replace_all(rnames,"M_","")
rnames <- str_replace_all(rnames,"RD_","")
rnames <- str_replace_all(rnames,"Ba_","")
rnames <- str_replace_all(rnames,"De_","")
description <- character()

for (ddet in c(1:length(rnames)))
{
  description <- c(description,TADPOLE_D1_D2_Dict$TEXT[str_detect(TADPOLE_D1_D2_Dict$FLDNAME,rnames[ddet])][1])
}
names(description) <- frnames

tableMCI_to_Dem$Description <- description[rownames(tableMCI_to_Dem)]
pander::pander(tableMCI_to_Dem)
  Estimate lower HR upper full.AUC Delta.AUC z.IDI Frequency Cluster Description
FAQ 2.46e-01 1.273 1.581 1.963 0.800 0.032788 4.22 1.00 1 NA
RAVLT_immediate -3.44e-01 0.400 0.527 0.695 0.800 0.013008 5.36 1.00 1 NA
ABETA -2.08e-01 0.541 0.679 0.853 0.800 -0.007637 3.76 1.00 1 NA
M_ST56SA -2.16e-01 0.586 0.693 0.819 0.797 0.008198 4.31 1.00 1 Surface Area of LeftSuperiorFrontal
ADAS13 1.24e-01 1.130 1.501 1.993 0.808 -0.000754 2.44 0.90 1 NA
PTAU 1.38e-02 1.165 1.399 1.680 0.798 0.007735 3.44 0.90 1 NA
TAU 3.14e-01 1.224 1.465 1.753 0.793 0.010720 4.37 0.80 2 NA
M_ST13TA -2.04e-01 0.572 0.659 0.760 0.794 0.027437 5.44 0.75 1 Cortical Thickness Average of LeftBankssts
ADAS11 1.91e-01 1.463 1.789 2.189 0.782 0.025417 5.96 0.65 2 NA
RD_ST34CV -8.86e-02 0.683 0.779 0.888 0.806 0.020088 3.90 0.65 1 Volume (Cortical Parcellation) of LeftIsthmusCingulate
RD_ST49SA -8.66e-02 0.699 0.804 0.925 0.800 0.007946 2.95 0.65 1 Surface Area of LeftPostcentral
M_ST29SV -1.17e-01 0.500 0.643 0.826 0.782 0.005547 3.69 0.60 2 Volume (WM Parcellation) of LeftHippocampus
APOE4 3.15e-01 1.357 2.063 3.136 0.777 0.011835 3.41 0.60 2 NA
M_ST56CV -2.26e-02 0.694 0.782 0.881 0.775 0.007591 2.79 0.55 2 Volume (Cortical Parcellation) of LeftSuperiorFrontal
M_ST11SV -1.56e-01 0.625 0.736 0.868 0.784 0.013446 3.66 0.45 2 Volume (WM Parcellation) of LeftAccumbensArea
M_ST14TS 5.94e-02 1.094 1.252 1.433 0.782 0.007519 3.07 0.40 2 Cortical Thickness Standard Deviation of LeftCaudalAnteriorCingulate
RD_ST34SA -1.02e-01 0.619 0.750 0.911 0.780 0.016271 2.80 0.35 2 Surface Area of LeftIsthmusCingulate
M_ST59SA -8.52e-02 0.645 0.754 0.883 0.782 -0.000775 3.96 0.30 2 Surface Area of LeftSupramarginal
RAVLT_perc_forgetting 7.07e-02 1.224 1.684 2.319 0.762 0.012586 3.85 0.25 2 NA
M_ST24CV -1.02e-01 0.557 0.689 0.852 0.784 0.010169 3.50 0.15 2 Volume (Cortical Parcellation) of LeftEntorhinal
M_ST13CV -4.86e-13 0.682 0.786 0.907 0.787 -0.006338 3.28 0.15 1 Volume (Cortical Parcellation) of LeftBankssts
MMSE -3.99e-02 0.610 0.745 0.911 0.762 0.019400 2.76 0.10 3 NA
M_ST12SV -3.66e-02 0.581 0.711 0.869 0.762 0.022628 3.58 0.10 4 Volume (WM Parcellation) of LeftAmygdala
RD_ST15TS -5.97e-02 0.661 0.773 0.903 0.790 0.008388 3.36 0.10 5 Cortical Thickness Standard Deviation of LeftCaudalMiddleFrontal
M_ST26CV -1.95e-13 0.620 0.749 0.905 0.755 -0.017097 2.99 0.05 6 Volume (Cortical Parcellation) of LeftFusiform
M_ST39CV -9.17e-14 0.814 0.873 0.936 0.794 0.011278 3.83 0.05 7 Volume (Cortical Parcellation) of LeftMedialOrbitofrontal
M_ST59CV -1.68e-13 0.693 0.780 0.876 0.792 0.013338 4.16 0.05 8 Volume (Cortical Parcellation) of LeftSupramarginal
M_ST39SA -4.15e-14 0.904 0.940 0.978 0.783 0.007519 3.10 0.05 9 Surface Area of LeftMedialOrbitofrontal

2.1.12 Heat map


hm <- heatMaps(Outcome="status",data=TADPOLECrossMRI[,c("status",clusterFeatures)],title="Heat Map",Scale=TRUE,
                       theFiveColors=c("black","red","orange","yellow","white"),
#                      theFiveColors=c("darkred","red","yellow","blue","darkblue"),
                       hCluster="col",
                       cexRow=0.50,cexCol=0.65,srtCol=35,
                       ylab="Subjects",
                       xlab="Features"
                       )

2.1.13 Saving the enviroment

save.image("./TADPOLE_BSWIMS_Results.RData")